/*
算法2-10 大整数相加运算
分数 20
作者 陈越
单位 浙江大学

请编写程序，求两个不超过 1000 位的大整数的和。题目保证和是正整数。
输入格式：

输入在两行中分别给出两个整数，保证不超过 1000 位。
输出格式：

在一行中输出两个整数的和。但如果和超过了 1000 位，则仅输出 错误：位数超限。。
输入样例 1：

499876543201234567893
11223756899976543227

输出样例 1：

511100300101211111120

输入样例 2：

-11223756899976543227
499876543201234567893

输出样例 2：

488652786301258024666
*/

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

#define MAX_LEN 1000

using namespace std;

string addStrings(const string &a, const string &b) {
    int n = a.size(), m = b.size();
    int carry = 0;
    vector<int> sum(max(n, m) + 1, 0);
    for (int i = 0; i < sum.size(); ++i) {
        int x = i < n ? a[n - 1 - i] - '0' : 0;
        int y = i < m ? b[m - 1 - i] - '0' : 0;
        sum[i] = x + y + carry;
        carry = sum[i] / 10;
        sum[i] %= 10;
    }
    while (sum.size() > 1 && sum.back() == 0) {
        sum.pop_back();
    }
    if (sum.size() > MAX_LEN) {
        return "错误：位数超限。";
    }
    string result;
    for (int i = sum.size() - 1; i >= 0; --i) {
        result += to_string(sum[i]);
    }
    return result;
}

string subtractStrings(const string &a, const string &b) {
    int n = a.size(), m = b.size();
    int borrow = 0;
    vector<int> diff(max(n, m), 0);
    for (int i = 0; i < diff.size(); ++i) {
        int x = i < n ? a[n - 1 - i] - '0' : 0;
        int y = i < m ? b[m - 1 - i] - '0' : 0;
        diff[i] = x - y - borrow;
        if (diff[i] < 0) {
            diff[i] += 10;
            borrow = 1;
        } else {
            borrow = 0;
        }
    }
    while (diff.size() > 1 && diff.back() == 0) {
        diff.pop_back();
    }
    string result;
    for (int i = diff.size() - 1; i >= 0; --i) {
        result += to_string(diff[i]);
    }
    return result;
}

int compareStrings(const string &a, const string &b) {
    if (a.size() != b.size()) {
        return a.size() > b.size() ? 1 : -1;
    }
    for (int i = 0; i < a.size(); ++i) {
        if (a[i] != b[i]) {
            return a[i] > b[i] ? 1 : -1;
        }
    }
    return 0;
}

int main() {
    string a, b;
    cin >> a >> b;

    bool negA = a[0] == '-';
    bool negB = b[0] == '-';
    if (negA) a = a.substr(1);
    if (negB) b = b.substr(1);

    if (a.size() > MAX_LEN || b.size() > MAX_LEN) {
        cout << "错误：位数超限。" << endl;
        return 0;
    }

    string result;
    if (negA == negB) {
        result = addStrings(a, b);
        if (negA && result != "错误：位数超限。") {
            result = "-" + result;
        }
    } else {
        int cmp = compareStrings(a, b);
        if (cmp == 0) {
            result = "0";
        } else if (cmp > 0) {
            result = subtractStrings(a, b);
            if (negA) {
                result = "-" + result;
            }
        } else {
            result = subtractStrings(b, a);
            if (negB) {
                result = "-" + result;
            }
        }
    }

    cout << result << endl;
    return 0;
}